const _ = require('lodash')
// JACK LOVE => jack-love
// const f = _.flowRight(_.toUpper, _.first, _.reverse)
// 结合律
// const f = _.flowRight(_.flowRight(_.toUpper, _.first), _.reverse)
// const f = _.flowRight(_.toUpper, _.flowRight(_.first, _.reverse))
// console.log(f(['one', 'two', 'three'])) // THREE

// 调试
const trace = _.curry((tag, v) => {
  console.log(tag, v)
  return v
})
// _.split()
// 多个参数改造成一个参数 柯里化 函数组合才可以使用
// 掉换位置因为要先传入sep 后传入str
const split = _.curry((sep, str) => _.split(str, sep))
// _.toLower() 只有一个参数可以直接使用
// _.join()
const join = _.curry((sep, arr) => _.join(arr, sep))

const log = (v) => {
  console.log(v)
  return v
}
// _.map()
const map = _.curry((fn, arr) => _.map(arr, fn))
const f = _.flowRight(
  join('-'),
  trace(' after map'),
  map(_.toLower),
  trace(' after split'),
  // 切割后的split会传递给前面的函数
  split(' ')
)
console.log(f('JackLove')) //j-a-c-k-,-l-o-v-e
// [ 'JACK', 'LOVE' ]
// jack,love 数组变成了字符串了 !!! 但是我们需要数组
// jack-love

// trace
// after split [ 'JACK', 'LOVE' ]
// after map [ 'jack', 'love' ]
// jack-love
